#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main()
{
    int fd[2];
    if (pipe(fd) < 0) // 创建无名管道 失败返回-1
    {
        printf("创建管道失败\n");
        perror("pipe");
        return 1;
    }

    int pid = fork(); // 创建一个子进程
    if (pid == 0)     // 成功返回0
    {
        // 子进程
        char buf[128];
        close(fd[1]); // 关闭管道写端口
        ssize_t len = read(fd[0], buf, sizeof(buf));
        close(fd[0]); // 关闭管道读端口
        // 将读到的数据写到控制台
        write(STDOUT_FILENO, buf, len);
    }
    else if (pid > 0)
    {
        // 父进程
        //1.从控制台读数据
        char read_com[128];
        read(STDIN_FILENO,read_com,128);

        close(fd[0]); // 关闭管道读端口
        write(fd[1], read_com, 128);
        close(fd[1]); // 关闭管道写端口
        pid_t child_pid;
        int result; 
        child_pid = wait(&result); //回收子进程
        if (child_pid < 0)
        {
            perror("wait");//回收失败
        }
        printf("子进程执行结束,pid = %d,结果为: %d\n",child_pid,result);
        
        
    }
    else
    {
        // 创建进程失败
        perror("fork");
        return 1;
    }
    printf("父进程结束%d\n",pid);

    return 0;
}